package com.wwg.bitcalc;


/**
 *类描述:回顾
 *
 *@Author:WWG
 *@date:2020年6月8日
 *@Version:2.9
 */
public class BitCalc {
    
    public static void main(String[] args) {
        int i = 10 << 0;
        int q = 1 >>> 2;
        /*
        -20: 1001 0100
               右移两位： 1000 01 01 =》 -5
        */
        int x = -20 >> 2;
        /*
         -20: 1001 0100
                右移两位： 1000 01 01
         */
        int y = -20 >>> 2;
        
        System.out.println(i);
        System.out.println(q);

        System.out.println(x);
        System.out.println(y);
    }
}


/**
<<表示左移移，不分正负数，低位补0；　

注：以下数据类型默认为byte-8位

左移时不管正负，低位补0

正数：r = 20 << 2

　　20的二进制补码：0001 0100

　　向左移动两位后：0101 0000

　　　　   　　结果：r = 80

负数：r = -20 << 2

　　-20 的二进制原码 ：1001 0100

　　-20 的二进制反码 ：1110 1011

　　-20 的二进制补码 ：1110 1100

　　左移两位后的补码：1011 0000

　　　　　　　　反码：1010 1111

　　　　　　　　原码：1101 0000

　　　　　　　　结果：r = -80

>>表示右移，如果该数为正，则高位补0，若为负数，则高位补1；

注：以下数据类型默认为byte-8位

正数：r = 20 >> 2

　　20的二进制补码：0001 0100
                   0001 0100  》0000 0101
　　向右移动两位后：0000 0101

　　　　　　　结果：r = 5

负数：r = -20 >> 2

　　-20 的二进制原码 ：1001 0100

　　-20 的二进制反码 ：1110 1011

　　-20 的二进制补码 ：1110 1100 

　　右移两位后的补码：1111 1011 

　　　　　　　　反码：1111 1010

　　　　　　　　原码：1000 0101

　　　　　　　　结果：r = -5

>>>表示无符号右移，也叫逻辑右移，即若该数为正，则高位补0，而若该数为负数，则右移后高位同样补0

正数：　r = 20 >>> 2

　　　　的结果与 r = 20 >> 2 相同；

负数：　r = -20 >>> 2

注：以下数据类型默认为int 32位

　　-20:源码：10000000 00000000 00000000 00010100

　　　　反码：11111111  11111111   11111111   11101011

　　　　补码：11111111  11111111   11111111   11101100

　　　　右移：00111111  11111111   11111111   11111011

　　　　结果：r = 1073741819
 * */